{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import tensorflow as tf\n",
    "from tensorflow.examples.tutorials.mnist import input_data\n",
    "from matplotlib import  pyplot as plt\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "tf.logging.set_verbosity(tf.logging.INFO)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "WARNING: Logging before flag parsing goes to stderr.\n",
      "W1101 13:26:08.522955  7680 deprecation.py:323] From <ipython-input-3-bbfd90b7f5be>:1: read_data_sets (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use alternatives such as official/mnist/dataset.py from tensorflow/models.\n",
      "W1101 13:26:08.523951  7680 deprecation.py:323] From C:\\Users\\zhouhao\\AppData\\Roaming\\Python\\Python36\\site-packages\\tensorflow\\contrib\\learn\\python\\learn\\datasets\\mnist.py:260: maybe_download (from tensorflow.contrib.learn.python.learn.datasets.base) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please write your own downloading logic.\n",
      "W1101 13:26:08.526467  7680 deprecation.py:323] From C:\\Users\\zhouhao\\AppData\\Roaming\\Python\\Python36\\site-packages\\tensorflow\\contrib\\learn\\python\\learn\\datasets\\mnist.py:262: extract_images (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use tf.data to implement this functionality.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Extracting ./train-images-idx3-ubyte.gz\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "W1101 13:26:08.816238  7680 deprecation.py:323] From C:\\Users\\zhouhao\\AppData\\Roaming\\Python\\Python36\\site-packages\\tensorflow\\contrib\\learn\\python\\learn\\datasets\\mnist.py:267: extract_labels (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use tf.data to implement this functionality.\n",
      "W1101 13:26:08.822490  7680 deprecation.py:323] From C:\\Users\\zhouhao\\AppData\\Roaming\\Python\\Python36\\site-packages\\tensorflow\\contrib\\learn\\python\\learn\\datasets\\mnist.py:110: dense_to_one_hot (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use tf.one_hot on tensors.\n",
      "W1101 13:26:08.892908  7680 deprecation.py:323] From C:\\Users\\zhouhao\\AppData\\Roaming\\Python\\Python36\\site-packages\\tensorflow\\contrib\\learn\\python\\learn\\datasets\\mnist.py:290: DataSet.__init__ (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use alternatives such as official/mnist/dataset.py from tensorflow/models.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Extracting ./train-labels-idx1-ubyte.gz\n",
      "Extracting ./t10k-images-idx3-ubyte.gz\n",
      "Extracting ./t10k-labels-idx1-ubyte.gz\n",
      "(55000, 784)\n",
      "(55000, 10)\n",
      "(5000, 784)\n",
      "(5000, 10)\n",
      "(10000, 784)\n",
      "(10000, 10)\n"
     ]
    }
   ],
   "source": [
    "mnist=input_data.read_data_sets(\"./\",one_hot=True)\n",
    "print(mnist.train.images.shape)\n",
    "print(mnist.train.labels.shape)\n",
    "\n",
    "print(mnist.validation.images.shape)\n",
    "print(mnist.validation.labels.shape)\n",
    "\n",
    "print(mnist.test.images.shape)\n",
    "print(mnist.test.labels.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x576 with 16 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(8,8))\n",
    "for idx in range(16):\n",
    "    plt.subplot(4,4,idx+1)\n",
    "    plt.axis(\"off\")\n",
    "    plt.title(\"[{}]\".format(np.argmax(mnist.train.labels[idx])))\n",
    "    plt.imshow(mnist.train.images[idx].reshape((28,28)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "x=tf.placeholder(\"float\",[None,784],name='x')\n",
    "y=tf.placeholder(\"float\",[None,10],name='y')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "x_image=tf.reshape(x,[-1,28,28,1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "with tf.name_scope('conv1'):\n",
    "    c1=tf.contrib.slim.conv2d(\n",
    "        x_image,6,[5,5],padding=\"VALID\",\n",
    "        activation_fn=tf.nn.relu)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "with tf.name_scope('pool1'):\n",
    "    s2=tf.contrib.slim.max_pool2d(\n",
    "        c1,[2,2],stride=[2,2],padding='VALID')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "with tf.name_scope('conv2'):\n",
    "    c3=tf.contrib.slim.conv2d(\n",
    "        s2,16,[5,5],padding='VALID',\n",
    "        activation_fn=tf.nn.relu)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "with tf.name_scope('pool2'):\n",
    "    s4=tf.contrib.slim.max_pool2d(\n",
    "        c3,[2,2],stride=[2,2],padding=\"VALID\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "W1101 13:26:10.642277  7680 deprecation.py:323] From C:\\Users\\zhouhao\\AppData\\Roaming\\Python\\Python36\\site-packages\\tensorflow\\contrib\\layers\\python\\layers\\layers.py:1634: flatten (from tensorflow.python.layers.core) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Use keras.layers.flatten instead.\n"
     ]
    }
   ],
   "source": [
    "with tf.name_scope('fc1'):\n",
    "    s4_flat=tf.contrib.slim.flatten(s4)\n",
    "    c5=tf.contrib.slim.fully_connected(\n",
    "        s4_flat,120,activation_fn=tf.nn.relu)\n",
    "\n",
    "with tf.name_scope('fc2'):\n",
    "    F6=tf.contrib.slim.fully_connected(c5,84,activation_fn=tf.nn.relu)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "W1101 13:26:11.556104  7680 deprecation.py:506] From <ipython-input-12-3a4d9ad19987>:3: calling dropout (from tensorflow.python.ops.nn_ops) with keep_prob is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use `rate` instead of `keep_prob`. Rate should be set to `rate = 1 - keep_prob`.\n"
     ]
    }
   ],
   "source": [
    "with tf.name_scope('dropout'):\n",
    "    keep_prob=tf.placeholder(name='keep_brob',dtype=tf.float32)\n",
    "    F6_drop=tf.nn.dropout(F6,keep_prob)\n",
    "    \n",
    "with tf.name_scope('fc3'):\n",
    "    logits=tf.contrib.slim.fully_connected(F6_drop,10,activation_fn=None)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "W1101 13:26:11.608962  7680 deprecation.py:323] From <ipython-input-13-3c67726375c4>:2: softmax_cross_entropy_with_logits (from tensorflow.python.ops.nn_ops) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "\n",
      "Future major versions of TensorFlow will allow gradients to flow\n",
      "into the labels input on backprop by default.\n",
      "\n",
      "See `tf.nn.softmax_cross_entropy_with_logits_v2`.\n",
      "\n",
      "I1101 13:26:11.657830  7680 summary_op_util.py:66] Summary name Conv/weights:0 is illegal; using Conv/weights_0 instead.\n",
      "I1101 13:26:11.661821  7680 summary_op_util.py:66] Summary name Conv/biases:0 is illegal; using Conv/biases_0 instead.\n",
      "I1101 13:26:11.664813  7680 summary_op_util.py:66] Summary name Conv_1/weights:0 is illegal; using Conv_1/weights_0 instead.\n",
      "I1101 13:26:11.672793  7680 summary_op_util.py:66] Summary name Conv_1/biases:0 is illegal; using Conv_1/biases_0 instead.\n",
      "I1101 13:26:11.677778  7680 summary_op_util.py:66] Summary name fully_connected/weights:0 is illegal; using fully_connected/weights_0 instead.\n",
      "I1101 13:26:11.683762  7680 summary_op_util.py:66] Summary name fully_connected/biases:0 is illegal; using fully_connected/biases_0 instead.\n",
      "I1101 13:26:11.690742  7680 summary_op_util.py:66] Summary name fully_connected_1/weights:0 is illegal; using fully_connected_1/weights_0 instead.\n",
      "I1101 13:26:11.694733  7680 summary_op_util.py:66] Summary name fully_connected_1/biases:0 is illegal; using fully_connected_1/biases_0 instead.\n",
      "I1101 13:26:11.705732  7680 summary_op_util.py:66] Summary name fully_connected_2/weights:0 is illegal; using fully_connected_2/weights_0 instead.\n",
      "I1101 13:26:11.713682  7680 summary_op_util.py:66] Summary name fully_connected_2/biases:0 is illegal; using fully_connected_2/biases_0 instead.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Conv/weights:0\n",
      "Conv/biases:0\n",
      "Conv_1/weights:0\n",
      "Conv_1/biases:0\n",
      "fully_connected/weights:0\n",
      "fully_connected/biases:0\n",
      "fully_connected_1/weights:0\n",
      "fully_connected_1/biases:0\n",
      "fully_connected_2/weights:0\n",
      "fully_connected_2/biases:0\n"
     ]
    }
   ],
   "source": [
    "cross_entropy_loss=tf.reduce_mean(\n",
    "    tf.nn.softmax_cross_entropy_with_logits(logits=logits,labels=y))\n",
    "l2_loss=tf.add_n([tf.nn.l2_loss(w)\n",
    "                 for w in tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES)])\n",
    "for w in tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES):\n",
    "    print(w.name)\n",
    "    tf.summary.histogram(w.name,w)\n",
    "\n",
    "total_loss=cross_entropy_loss+7e-5*l2_loss\n",
    "tf.summary.scalar('cross_entropy_loss',cross_entropy_loss)\n",
    "tf.summary.scalar('l2_loss',l2_loss)\n",
    "tf.summary.scalar('total_loss',total_loss)\n",
    "\n",
    "optimizer=tf.train.GradientDescentOptimizer(\n",
    "    learning_rate=0.3).minimize(total_loss)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "pred=tf.nn.softmax(logits)\n",
    "correct_pred=tf.equal(tf.argmax(y,1),tf.argmax(logits,1))\n",
    "accuracy=tf.reduce_mean(tf.cast(correct_pred,tf.float32))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "batch_size=100\n",
    "trainig_step=1100\n",
    "saver=tf.train.Saver()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "after 100 training step, the loss is 0.45189,the validation accuracy is 0.8844\n",
      "after 200 training step, the loss is 0.231579,the validation accuracy is 0.9396\n",
      "after 300 training step, the loss is 0.0872064,the validation accuracy is 0.9654\n",
      "after 400 training step, the loss is 0.0971133,the validation accuracy is 0.9704\n",
      "after 500 training step, the loss is 0.359936,the validation accuracy is 0.9652\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "W1101 13:26:33.786418  7680 deprecation.py:323] From C:\\Users\\zhouhao\\AppData\\Roaming\\Python\\Python36\\site-packages\\tensorflow\\python\\training\\saver.py:960: remove_checkpoint (from tensorflow.python.training.checkpoint_management) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Use standard file APIs to delete files with this prefix.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "after 600 training step, the loss is 0.145757,the validation accuracy is 0.9768\n",
      "after 700 training step, the loss is 0.115768,the validation accuracy is 0.9758\n",
      "after 800 training step, the loss is 0.166473,the validation accuracy is 0.9774\n",
      "after 900 training step, the loss is 0.0519021,the validation accuracy is 0.9798\n",
      "after 1000 training step, the loss is 0.159924,the validation accuracy is 0.974\n",
      "the train is finish!\n",
      "the test accuracy is : 0.9799\n"
     ]
    }
   ],
   "source": [
    "merged=tf.summary.merge_all()\n",
    "with tf.Session() as sess:\n",
    "    writer=tf.summary.FileWriter(\"logs/\",sess.graph)\n",
    "    sess.run(tf.global_variables_initializer())\n",
    "    validate_data={\n",
    "        x:mnist.validation.images,\n",
    "        y:mnist.validation.labels,\n",
    "        keep_prob:1.0\n",
    "    }\n",
    "    test_data={\n",
    "        x:mnist.test.images,\n",
    "        y:mnist.test.labels,\n",
    "        keep_prob:1.0\n",
    "    }\n",
    "    for i in range(trainig_step):\n",
    "        xs,ys=mnist.train.next_batch(batch_size)\n",
    "        _,loss,rs=sess.run(\n",
    "            [optimizer,cross_entropy_loss,merged],\n",
    "            feed_dict={\n",
    "                x:xs,\n",
    "                y:ys,\n",
    "                keep_prob:0.6\n",
    "            })\n",
    "        writer.add_summary(rs,i)\n",
    "        if i >0 and i %100 ==0:\n",
    "            validate_accuracy=sess.run(accuracy,feed_dict=validate_data)\n",
    "            print(\"after %d training step, the loss is %g,the validation accuracy is %g\"%(i,loss,validate_accuracy))\n",
    "            saver.save(sess,'./model.ckpt',global_step=i)\n",
    "    print(\"the train is finish!\")\n",
    "    acc=sess.run(accuracy,feed_dict=test_data)\n",
    "    print(\"the test accuracy is :\",acc)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "I1101 14:37:04.239801  7680 saver.py:1280] Restoring parameters from ./model.ckpt-1000\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1.0\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x576 with 16 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "with tf.Session() as sess:\n",
    "    ckpt=tf.train.get_checkpoint_state('./')\n",
    "    if ckpt and ckpt.model_checkpoint_path:\n",
    "        saver.restore(sess,ckpt.model_checkpoint_path)\n",
    "        final_pred,acc=sess.run(\n",
    "        [pred,accuracy],\n",
    "            feed_dict={\n",
    "                x:mnist.test.images[:16],\n",
    "                y:mnist.test.labels[:16],\n",
    "                keep_prob:1.0\n",
    "            })\n",
    "        orders=np.argsort(final_pred)\n",
    "        plt.figure(figsize=(8,8))\n",
    "        print(acc)\n",
    "        for idx in range(16):\n",
    "            order=orders[idx,:][-1]\n",
    "            prob=final_pred[idx,:][order]\n",
    "            plt.subplot(4,4,idx+1)\n",
    "            plt.axis('off')\n",
    "            plt.title('{}:[{}]-[{:.1f}%]'.format(np.argmax(mnist.test.labels[idx]),order,prob*100))\n",
    "            plt.imshow(mnist.test.images[idx].reshape((28,28)))\n",
    "        else:\n",
    "            pass"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- CNN的最大特点就是稀疏连接（局部感受）和权值共享。稀疏连接和权值共享可以减少所要训练的参数，减少计算复杂度。      \n",
    "- 卷积神经网络是一个多层的神经网络，每层由多个二维平面组成，而每个平面由多个独立神经元组成。       \n",
    "- 卷积网络在本质上是一种输入到输出的映射，它能够学习大量的输入与输出之间的映射关系，而不需要任何输入和输出之间的精确的数学表达式，只要用已知的模式对卷积网络加以训练，网络就具有输入输出对之间的映射能力。      "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 卷积神经网络结构包括：卷积层，池化层，全链接层。每一层有多个特征图，每个特征图通过一种卷积滤波器提取输入的一种特征，每个特征图有多个神经元。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 卷积层：使用卷积层的原因是卷积运算的一个重要特点是，通过卷积运算，可以使原信号特征增强，并且降低噪音。      \n",
    "- 降采样层：使用降采样的原因是，根据图像局部相关性的原理，对图像进行子采样可以减少计算量，同时保持图像旋转不变性。   \n",
    "- 全连接层：采用softmax全连接，得到的激活值即卷积神经网络提取到的图片特征。     "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "相较于全连接神经网络，卷积神经网络具有局部感知和参数共享两个特点，局部感知即卷积神经网络提出每个神经元不需要感知图像中的全部像素，只对图像的局部像素进行感知，然后在更高层将这些局部的信息进行合并，从而得到图像的全部表征信息。不同层的神经单元采用局部连接的方式，即每一层的神经单元只与前一层部分神经单元相连。每个神经单元只响应感受野内的区域，完全不关心感受野之外的区域。这样的局部连接模式保证了学习到的卷积核对输入的空间局部模式具有最强的响应。权值共享网络结构使之更类似于生物神经网络，降低了网络模型的复杂度，减少了权值的数量。这种网络结构对平移、比例缩放、倾斜或者共他形式的变形具有高度不变性。而且卷积神经网络采用原始图像作为输入，可以有效的从大量样本中学习到相应地特征，避免了复杂的特征提取过程。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
